/**
 * 特殊角色--权限过滤
 */
import store from '@/store'
// 统一 -地址白名单
const whitePath = ['/home', '/404']
// 角色--状态管理中获取
// const roles = store.getters.roles
/**
 * 判断--角色权限
 */
const rolesBool = {
  /**
   * 新版路由权限控制-兼容所有角色
   * 但是-必须获取菜单资源
   */
  // ======== 角色|用户菜单权限 =========
  isMenuBool(toPath, bool) { // bool 是否关闭验证 true 关闭
    if (bool) return !bool
    var rolesMenus = store.getters.menus // 角色菜单
    var userMenus = store.getters.info.authMenu // 用户菜单
    rolesMenus = rolesMenus != null ? rolesMenus : []
    userMenus = userMenus != null ? userMenus : []
    // true 拦截 false 释放
    if (whitePath.includes(toPath)) { // 全局白名单 -- 释放
      return false
    }
    const bool_1 = authMenuTree(rolesMenus, toPath)
    const bool_2 = authMenuTree(userMenus, toPath)
    return bool_1 && bool_2
  }
}
// 递归-菜单-资源验证 | true 拦截 false 释放
function authMenuTree(menus, toPath) {
  var res = true
  if (menus.length > 0) {
    for (const obj of menus) {
      if (obj.type == 1) { // 菜单
        if (obj.sourceUrl) { // 菜单-url存在--验证
          const url = toRouterUrl(obj.sourceUrl)
          if (url === toPath) {
            res = false; return res
          }
        }
      }
      if (obj.children && obj.children.length > 0) { // 下级存在
        const bool = authMenuTree(obj.children, toPath)
        if (!bool) return bool
      }
    }
  }
  return res // 默认-拦截
}
// sourceUrl 转换--路由地址--
function toRouterUrl(url) {
  url = url.charAt(0) == '/' ? url.substring(1) : url
  url = url.replace(/\/+/g, '_')
  url = url.indexOf('.') > -1 ? url.substring(0, url.indexOf('.')) : url
  url = '/' + url
  return url
}
/** =================返回对象===================== */
export default rolesBool
